package org.example.sort;

/**
 * 冒泡排序
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] a = {5,2,3,7,1,0};
        for (int i = 0; i < a.length; i++) {
            for(int j = i + 1; j < a.length; j++){
                if(a[i] > a[j]){
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }

//    基本原理:相邻比较：从数组第一个元素开始，依次比较相邻的两个元素
//    交换位置：如果前一个元素大于后一个元素（升序排列），则交换它们的位置
//    逐步推进：每一轮比较后，最大的元素会"冒泡"到数组末尾
//    重复执行：对剩余未排序的元素重复上述过程，直到整个数组有序
//    核心特点:双重循环结构：
//    外层循环控制排序轮数
//    内层循环负责每轮的相邻元素比较
//    逐步缩小范围：每完成一轮，已排序部分增加一个元素，比较范围相应减少
//    提前终止优化：若某轮比较中没有发生交换，说明数组已有序，可提前结束
//    时间复杂度:
//    最坏情况：O(n²) - 数组完全逆序
//    最好情况：O(n) - 数组已经有序（优化版本）
//    平均情况：O(n²)
//    空间复杂度:
//    O(1) - 只需要常数级别的额外空间用于元素交换
}
